package com.zshan.clinic.admin.mapper.medical;


import com.zshan.clinic.admin.entity.vo.OrderExamDetailVo;
import com.zshan.clinic.admin.entity.vo.OrderExamHistoryVo;
import com.zshan.clinic.admin.entity.vo.OrderExamPageVo;
import com.zshan.clinic.admin.entity.vo.OrderExamPatientVo;
import com.zshan.clinic.mybatis.SuperMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

public interface SpecExamOrderMapper extends SuperMapper {

    /**
     * 查询查验列表
     * @param clinicId
     * @param patientName
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExamPageVo> getExamList(@Param("clinicId") Long clinicId,
                                      @Param("projectCategory") String projectCategory,
                                      @Param("patientName") String patientName,
                                      @Param("visitDate") LocalDate visitDate,
                                      @Param("offset") Integer offset,
                                      @Param("limit") Integer limit);

    /**
     * 查询审核列表
     * @param clinicId
     * @param patientName
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExamPageVo> getAuditList(@Param("clinicId") Long clinicId,
                                       @Param("projectCategory") String projectCategory,
                                      @Param("patientName") String patientName,
                                      @Param("visitDate") LocalDate visitDate,
                                      @Param("offset") Integer offset,
                                      @Param("limit") Integer limit);

    /**
     * 查询查验单详情
     * @param execId
     * @return
     */
    OrderExamDetailVo getOrderExamDetail(@Param("execId") Long execId);

    /**
     * 查询患者历史的检查单数量
     * @param clinicId
     * @param patientId
     * @param projectCategory
     * @return
     */
    Long getOrderExamHistoryCount(@Param("clinicId") Long clinicId,
                                  @Param("patientId") Long patientId,
                                  @Param("projectCategory") String projectCategory);

    /**
     * 查询患者查验历史
     * @param clinicId
     * @param patientId
     * @param projectCategory
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExamHistoryVo> getOrderExamHistoryList(@Param("clinicId") Long clinicId,
                                                     @Param("patientId") Long patientId,
                                                     @Param("projectCategory") String projectCategory,
                                                     @Param("offset") Integer offset,
                                                     @Param("limit") Integer limit);

    /**
     * 查询诊所今日待检查数
     * @param clinicId
     * @param visitDate
     * @return
     */
    List<OrderExamPageVo> getWaitingList(@Param("clinicId") Long clinicId,
                                         @Param("projectCategory") String projectCategory,
                                         @Param("visitDate") LocalDate visitDate);

    /**
     * 查询患者检验数
     * @param clinicId
     * @param patientId
     * @param projectCategory
     * @param visitDate
     * @return
     */
    Long getPatientExamCount(@Param("clinicId") Long clinicId,
                             @Param("patientId") Long patientId,
                             @Param("projectCategory") String projectCategory,
                             @Param("visitDate") LocalDate visitDate);

    /**
     * 查询患者检查数
     * @param clinicId
     * @param patientId
     * @param projectCategory
     * @param visitDate
     * @param offset
     * @param limit
     * @return
     */
    List<OrderExamPatientVo> getPatientExamList(@Param("clinicId") Long clinicId,
                                                @Param("patientId") Long patientId,
                                                @Param("projectCategory") String projectCategory,
                                                @Param("visitDate") LocalDate visitDate,
                                                @Param("offset") Integer offset,
                                                @Param("limit") Integer limit);

}
